#ifndef __BST_H__
#define __BST_H__

#define datatype int

typedef struct BSTNode
{
	datatype data;
	struct BSTNode *leftchild;
	struct BSTNode *rightchild;
} BSTNode;

typedef struct BST
{
	BSTNode *root;
} BST;

void InitBSTree(BST *bst);

int InsertBSTree(BSTNode **t, datatype *x);

BSTNode *Min(BSTNode *node);

BSTNode *Max(BSTNode *node);

void Sort(BSTNode *node); //排序，其实就是打印中序遍历结果

int RemoveBSTree(BSTNode **nodep, datatype *key);

BSTNode *SearchBSTree(BSTNode *node, datatype *key);      //递归写法
BSTNode *SearchBSTree2(BSTNode *node, datatype *key);     //非递归写法

void MakeEmptyBSTree(BSTNode **nodep);

#endif
